// 漏洞修复建议工具
export const vulnTypeLabels = {
  'sql_injection': 'SQL注入',
  'xss': '跨站脚本',
  'info_leak': '信息泄露',
  'csrf': 'CSRF攻击',
  'cmd_injection': '命令注入',
  'file_upload': '文件上传',
  'auth_bypass': '认证绕过',
  'ssrf': '服务器请求伪造'
};

export const codeLanguages = ['JavaScript', 'Python', 'PHP', 'Java', 'C#'];

export const severityColors = {
  high: '#f56c6c',
  medium: '#e6a23c',
  low: '#67c23a'
};

export const severityDescriptions = {
  high: '高风险 - 需要立即修复',
  medium: '中等风险 - 应优先修复',
  low: '低风险 - 建议修复'
};

export const repairSuggestions = {
  'sql_injection': {
    title: 'SQL注入漏洞修复建议',
    description: 'SQL注入是一种常见的Web安全漏洞，攻击者可以通过构造特殊的输入来执行未授权的SQL命令。',
    steps: [
      '使用参数化查询或预编译语句，避免直接拼接SQL语句。',
      '对所有用户输入进行严格的验证和过滤。',
      '实施最小权限原则，限制数据库用户的权限。',
      '使用ORM框架进行数据库操作。',
      '定期审计数据库查询日志，检测异常行为。'
    ],
    code_examples: {
      'python': '# 不安全的做法\nquery = "SELECT * FROM users WHERE username = %s AND password = %s" % (username, password)\n\n# 安全的做法\nquery = "SELECT * FROM users WHERE username = %s AND password = %s"\ncursor.execute(query, (username, password))',
      'java': '// 不安全的做法\nString query = "SELECT * FROM users WHERE username = ? AND password = ?";\nPreparedStatement pstmt = connection.prepareStatement(query);\npstmt.setString(1, username);\npstmt.setString(2, password);\nResultSet rs = pstmt.executeQuery();',
      'javascript': '// 不安全的做法\nconst query = "SELECT * FROM users WHERE username = ? AND password = ?";\nconnection.query(query, [username, password], (error, results) => {\n  // 处理结果\n});'
    }
  },
  'xss': {
    title: '跨站脚本（XSS）漏洞修复建议',
    description: 'XSS漏洞允许攻击者在用户浏览器中执行恶意脚本，可能导致会话劫持、数据盗窃等严重问题。',
    steps: [
      '对所有用户输入进行HTML转义处理。',
      '使用内容安全策略（CSP）来限制可以执行的脚本来源。',
      '实施输入验证，只允许指定的字符和格式。',
      '设置HttpOnly标志，防止JavaScript访问cookie。',
      '避免在JavaScript中直接使用eval()等危险函数。',
      '使用框架提供的安全渲染机制（如React的JSX、Vue的v-html）。'
    ],
    code_examples: {
      'javascript': '// 不安全的做法\ndocument.getElementById("output").innerHTML = userInput;\n\n// 安全的做法\nelement.textContent = userInput;',
      'python': '# 使用Flask的escape函数进行HTML转义\nfrom flask import escape\n\nsafe_output = escape(user_input)',
      'java': '// Java中使用OWASP Java Encoder进行HTML转义\nimport org.owasp.encoder.Encode;\n\nString safeOutput = Encode.forHtml(userInput);'
    }
  },
  'info_leak': {
    title: '信息泄露漏洞修复建议',
    description: '信息泄露可能导致敏感数据（如配置信息、源代码、用户数据等）被未授权访问。',
    steps: [
      '移除或限制对敏感文件的访问权限。',
      '配置适当的文件系统权限和Web服务器设置。',
      '不要在客户端代码中硬编码敏感信息。',
      '使用环境变量或配置文件存储敏感信息，并限制其访问权限。',
      '实施访问控制，确保只有授权用户可以访问敏感信息。'
    ],
    code_examples: {
      'apache': '# Apache .htaccess 文件示例\n# 禁止访问特定文件和目录\n<FilesMatch "\\.(env|git|svn|md|log)$">\n    Order allow,deny\n    Deny from all\n</FilesMatch>',
      'nginx': '# Nginx 配置示例\n# 禁止访问特定文件\nlocation ~* \\.(env|git|svn|md|log)$ {\n    deny all;\n}',
      'python': '# Flask中设置环境变量\nimport os\n\n# 从环境变量获取敏感信息\nSECRET_KEY = os.environ.get(\'SECRET_KEY\', \'default_fallback_key\')\nDATABASE_URL = os.environ.get(\'DATABASE_URL\', \'sqlite:///default.db\')'
    }
  },
  'command_injection': {
    title: '命令注入漏洞修复建议',
    description: '命令注入漏洞允许攻击者通过应用程序执行系统命令，可能导致完全的系统妥协。',
    steps: [
      '避免使用用户输入直接构建系统命令。',
      '使用参数化的API调用代替命令行调用。',
      '对所有用户输入进行严格的白名单验证。',
      '实施最小权限原则，以低权限用户身份运行应用程序。',
      '使用安全的库和API，避免直接调用exec、system等函数。'
    ],
    code_examples: {
      'nodejs': '// 不安全的做法\nconst { exec } = require("child_process");\nexec(`ls -la ${userInput}`, (error, stdout, stderr) => {\n  console.log(stdout);\n});\n\n// 安全的做法\nconst { execFile } = require("child_process");\nexecFile("ls", ["-la", safePath], (error, stdout, stderr) => {\n  console.log(stdout);\n});',
      'python': '# 安全的做法（使用subprocess.run并传递参数）\nimport subprocess\ntry:\n    # 只允许ping命令，用户输入仅作为参数\n    subprocess.run([\'ping\', \'-c\', \'4\', user_input], check=True)\nexcept subprocess.CalledProcessError as e:\n    print(f"Command failed: {e}")',
      'php': '// 安全的做法（使用escapeshellarg进行参数转义）\n$ip = escapeshellarg($_GET[\'ip\']);\nsystem("ping -c 4 " . $ip);'
    }
  },
  'csrf': {
    title: '跨站请求伪造（CSRF）漏洞修复建议',
    description: 'CSRF攻击欺骗用户在已认证的网站上执行非预期的操作，可能导致资金转账、密码修改等严重后果。',
    steps: [
      '为每个用户会话生成唯一的CSRF令牌。',
      '在所有状态改变的请求中验证CSRF令牌。',
      '实现SameSite cookie属性，防止跨站请求携带cookie。',
      '使用自定义请求头（如X-Requested-With）验证请求来源。',
      '对敏感操作实施二次验证（如密码确认、短信验证码）。'
    ],
    code_examples: {
      'express': '// 使用csurf中间件\nconst csurf = require("csurf");\nconst csrfProtection = csurf({ cookie: true });\n\n// 在路由中使用\napp.get("/form", csrfProtection, (req, res) => {\n  // 传递CSRF令牌到模板\n  res.render("send", { csrfToken: req.csrfToken() });\n});\n\napp.post("/process", csrfProtection, (req, res) => {\n  // 验证通过，可以处理请求\n  res.send("数据处理成功");\n});',
      'django': '# Django自动提供CSRF保护\n# 在模板中包含CSRF令牌\n<form method="post">\n  {% csrf_token %}\n  <!-- 表单字段 -->\n</form>',
      'python': '# Flask中的CSRF保护示例\nfrom flask_wtf.csrf import CSRFProtect\n\napp = Flask(__name__)\napp.config[\'SECRET_KEY\'] = \'your-secret-key\'\ncsrf = CSRFProtect(app)'
    }
  }
};

// 根据漏洞类型获取修复建议
export function getSuggestionByType(vulnType) {
  return repairSuggestions[vulnType] || null;
}

// 获取所有支持的漏洞类型
export function getAllVulnerabilityTypes() {
  return Object.keys(repairSuggestions);
}

// 根据漏洞类型和语言获取代码示例
export function getCodeExample(vulnType, language) {
  if (!repairSuggestions[vulnType] || !repairSuggestions[vulnType].code_examples) {
    return null;
  }
  
  return repairSuggestions[vulnType].code_examples[language] || 
         Object.values(repairSuggestions[vulnType].code_examples)[0] || null;
}

export default repairSuggestions;